/* eslint-disable no-console */
let defaults, possibleConfigFiles, settingsExist
const fs = require('fs')
const path = require('path')
const env = (process.env.NODE_ENV || 'development').toLowerCase()
const { merge } = require('./merge')

const defaultSettingsPath = path.join(
  __dirname,
  '../../../config/settings.defaults'
)

if (fs.existsSync(`${defaultSettingsPath}.js`)) {
  console.log(`Using default settings from ${defaultSettingsPath}.js`)
  defaults = require(`${defaultSettingsPath}.js`)
  settingsExist = true
} else if (fs.existsSync(`${defaultSettingsPath}.coffee`)) {
  // TODO: remove this in the next major version
  throw new Error(
    `CoffeeScript settings file ${defaultSettingsPath}.coffee is no longer supported, please convert to JavaScript`
  )
} else {
  defaults = {}
  settingsExist = false
}

if (process.env.SHARELATEX_CONFIG) {
  possibleConfigFiles = [process.env.SHARELATEX_CONFIG]
} else {
  possibleConfigFiles = [
    path.join(process.cwd(), `config/settings.${env}.js`),
    path.join(__dirname, `../../../config/settings.${env}.js`),
    // TODO: remove these in the next major version
    path.join(process.cwd(), `config/settings.${env}.coffee`),
    path.join(__dirname, `../../../config/settings.${env}.coffee`),
  ]
}

for (const file of possibleConfigFiles) {
  if (fs.existsSync(file)) {
    // TODO: remove this in the next major version
    if (file.endsWith('.coffee')) {
      throw new Error(
        `CoffeeScript settings file ${file} is no longer supported, please convert to JavaScript`
      )
    }
    console.log('Using settings from ' + file)
    module.exports = merge(require(file), defaults)
    settingsExist = true
    break
  }
}

if (!settingsExist) {
  console.warn("No settings or defaults found. I'm flying blind.")
}

module.exports = defaults
